WebAssemblyã®ãªãã¢ã¡ã¢ãªãä»®æ³ã¢ãã¬ã¹ç©ºéãã¡ã¢ãªãããã³ã°ã詳现ã«è§£èª¬ãã»ãã¥ãªãã£ãããã©ãŒãã³ã¹ãã¯ãã¹ãã©ãããã©ãŒã äºææ§ãžã®åœ±é¿ãéçºè åãã«è§£èª¬ã
WebAssemblyãªãã¢ã¡ã¢ãªä»®æ³ã¢ãã¬ã¹ç©ºéïŒã¡ã¢ãªãããã³ã°ã·ã¹ãã ãè§£ãæãã
WebAssemblyïŒWasmïŒã¯ãWebã¢ããªã±ãŒã·ã§ã³ã«ãã€ãã£ãã«è¿ãããã©ãŒãã³ã¹ããããããã¯ãã¹ãã©ãããã©ãŒã ã§ã®ã³ãŒãå®è¡ã®æ°ããªå¯èœæ§ãåãéãããšã§ããœãããŠã§ã¢éçºã®ç¶æ³ã«é©åœããããããŸãããWasmã®æ©èœã®èŠãšãªãã®ã¯ããã®ç¶¿å¯ã«èšèšãããã¡ã¢ãªã¢ãã«ãç¹ã«ãªãã¢ã¡ã¢ãªãšããã«é¢é£ããä»®æ³ã¢ãã¬ã¹ç©ºéã§ãããã®èšäºã§ã¯ãWasmã®ã¡ã¢ãªãããã³ã°ã·ã¹ãã ã®è€éããæãäžãããã®æ§é ãæ©èœããããŠäžçäžã®éçºè ãžã®åœ±é¿ãæ¢ããŸãã
WebAssemblyã®ã¡ã¢ãªã¢ãã«ãçè§£ãã
ã¡ã¢ãªãããã³ã°ã«å ¥ãåã«ãWasmã®ã¡ã¢ãªã¢ãã«ã®åºæ¬ååãçè§£ããããšãéèŠã§ããããã°ã©ã ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã¡ã¢ãªç®¡çã«çŽæ¥ã¢ã¯ã»ã¹ã§ããåŸæ¥ã®ã¢ããªã±ãŒã·ã§ã³ç°å¢ãšã¯ç°ãªããWasmã¯ãµã³ãããã¯ã¹åãããç°å¢å ã§åäœããŸãããã®ç°å¢ã¯Wasmã¢ãžã¥ãŒã«ãéé¢ããã¡ã¢ãªãå«ãã·ã¹ãã ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãå¶éããŸãã
ãªãã¢ã¡ã¢ãªïŒWasmã¢ãžã¥ãŒã«ã¯ããªãã¢ã¡ã¢ãªã¹ããŒã¹ãéããŠã¡ã¢ãªãšããåãããŸããããã¯ãã¡ã¢ãªãé£ç¶ããäžæ¬¡å ã®ãã€ãé åãšããŠã¢ãã¬ã¹æå®ãããããšãæå³ããŸãããã®æŠå¿µã¯æŠå¿µçã«ã¯åçŽã§ããã¡ã¢ãªã¯ãã€ãã®ã·ãŒã±ã³ã¹ã§ãããã¢ãžã¥ãŒã«ã¯ãã®ã·ãŒã±ã³ã¹å ã®ç¹å®ã®ãã€ããªãã»ããããèªã¿æžãã§ããŸãããã®ã·ã³ãã«ãããWasmã®ããã©ãŒãã³ã¹ç¹æ§ã®éèŠãªèŠçŽ ã§ãã
ã¡ã¢ãªã»ã°ã¡ã³ãïŒWasmã®ãªãã¢ã¡ã¢ãªã¯éåžžãã»ã°ã¡ã³ãã«åå²ãããŸãããããã®ã»ã°ã¡ã³ãã¯ãããŒãïŒåçå²ãåœãŠçšïŒãã¹ã¿ãã¯ïŒé¢æ°åŒã³åºããšããŒã«ã«å€æ°çšïŒãéçããŒã¿ã«å²ãåœãŠãããã¡ã¢ãªãªã©ãããŸããŸãªã¡ã¢ãªé åã衚ãããšããããããŸãããããã®ã»ã°ã¡ã³ãã®æ£ç¢ºãªç·šæã¯å€ãã®å Žåéçºè ã«å§ããããŠãããWasmã³ã³ãã€ã©ãšã©ã³ã¿ã€ã ãç°ãªããšããããã®ç®¡çæ¹æ³ããããã«ç°ãªãå ŽåããããŸããéèŠãªã®ã¯ããããã®é åãã¢ãã¬ã¹æå®ããŠå©çšããæ¹æ³ãçè§£ããããšã§ãã
ä»®æ³ã¢ãã¬ã¹ç©ºéïŒWasmã©ã³ã¿ã€ã ã¯ç©çã¡ã¢ãªãæœè±¡åããŸãã代ããã«ãWasmã¢ãžã¥ãŒã«ã«ä»®æ³ã¢ãã¬ã¹ç©ºéãæäŸããŸããWasmã¢ãžã¥ãŒã«ã¯ãã®ä»®æ³ã¢ãã¬ã¹ç©ºéå ã§åäœããç©çããŒããŠã§ã¢ãšçŽæ¥ããåãããŸãããããã«ãããããŸããŸãªãã©ãããã©ãŒã éã§ã®æè»æ§ãã»ãã¥ãªãã£ãç§»æ€æ§ãåäžããŸãã
ä»®æ³ã¢ãã¬ã¹ç©ºéã®è©³çް
Wasmã¢ãžã¥ãŒã«ã«æäŸãããä»®æ³ã¢ãã¬ã¹ç©ºéã¯ããã®ã»ãã¥ãªãã£ãšããã©ãŒãã³ã¹ã®éèŠãªåŽé¢ã§ããã¢ãžã¥ãŒã«ãã¡ã¢ãªèŠä»¶ãã¢ãã¬ã¹æå®ããã³ç®¡çããããã«å¿ èŠãªã³ã³ããã¹ããæäŸããŸãã
ã¢ãã¬ã¹æå®å¯èœãªã¡ã¢ãªïŒWasmã¢ãžã¥ãŒã«ã¯ããªãã¢ã¡ã¢ãªå ã®ç¹å®ã®ç¯å²ã®ãã€ããã¢ãã¬ã¹æå®ã§ããŸãããã®ã¢ãã¬ã¹æå®å¯èœãªã¡ã¢ãªã®ãµã€ãºã¯ãåºæ¬çãªãã©ã¡ãŒã¿ã§ããWasmã©ã³ã¿ã€ã ãç°ãªããšããµããŒãããæå€§ãµã€ãºãç°ãªãããããã®ç°å¢å ã§å®è¡ã§ããã¢ããªã±ãŒã·ã§ã³ã®è€éãã«åœ±é¿ããŸããæšæºã§ã¯ããã©ã«ãã®æå€§ãµã€ãºãæå®ãããŠããŸãããããã¯ã©ã³ã¿ã€ã ã«ãã£ãŠèª¿æŽã§ããå šäœçãªæ©èœã«åœ±é¿ããŸãã
ã¡ã¢ãªãããã³ã°ïŒããã§ãã¡ã¢ãªãããã³ã°ã·ã¹ãã ããç»å ŽããŸããWasmã¢ãžã¥ãŒã«ã§äœ¿çšãããä»®æ³ã¢ãã¬ã¹ã¯ãå®éã®ç©çã¡ã¢ãªã®å Žæã«ãããã³ã°ãããŸãããããã³ã°ããã»ã¹ã¯Wasmã©ã³ã¿ã€ã ã«ãã£ãŠåŠçãããŸããããã«ãããã©ã³ã¿ã€ã ã¯ã¢ãžã¥ãŒã«ã«å®å šã§å¶åŸ¡ãããã¡ã¢ãªãã¥ãŒãæäŸã§ããŸãã
ã»ã°ã¡ã³ããŒã·ã§ã³ãšä¿è·ïŒã¡ã¢ãªãããã³ã°ã«ãããã¡ã¢ãªä¿è·ãå¯èœã«ãªããŸããã©ã³ã¿ã€ã ã¯ãã¢ãã¬ã¹ç©ºéãã»ã°ã¡ã³ãã«åå²ãããããã®ã»ã°ã¡ã³ãã«ä¿è·ãã©ã°ïŒèªã¿åãå°çšãæžã蟌ã¿å°çšãå®è¡å¯èœïŒãèšå®ã§ããŸããããã¯åºæ¬çãªã»ãã¥ãªãã£ã¡ã«ããºã ã§ãããã©ã³ã¿ã€ã ã¯Wasmã¢ãžã¥ãŒã«ãã¢ã¯ã»ã¹ãèš±å¯ãããŠããªãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ãé²ãããšãã§ããŸãããã®ã¡ã¢ãªä¿è·ã¯ãµã³ãããã¯ã¹åã«äžå¯æ¬ ã§ãããæªæã®ããã³ãŒãããã¹ãç°å¢ã䟵害ããã®ãé²ããŸããã¡ã¢ãªã»ã°ã¡ã³ãã¯ãã³ãŒããããŒã¿ãã¹ã¿ãã¯ãªã©ã®ç¹å®ã®ã¿ã€ãã®ã³ã³ãã³ãã«å²ãåœãŠãããå€ãã®å Žåãæç¢ºã«å®çŸ©ãããAPIããã¢ã¯ã»ã¹ã§ãããããéçºè ã®ã¡ã¢ãªç®¡çãç°¡çŽ åãããŸãã
ã¡ã¢ãªãããã³ã°ã®å®è£
ã¡ã¢ãªãããã³ã°ã·ã¹ãã ã¯äž»ã«Wasmã©ã³ã¿ã€ã ã«ãã£ãŠå®è£ ãããŸããWasmã©ã³ã¿ã€ã ã¯ããã©ãŠã¶ãšã³ãžã³ã®äžéšãã¹ã¿ã³ãã¢ãã³ã®Wasmã€ã³ã¿ãŒããªã¿ãŒããŸãã¯Wasmã³ãŒããå®è¡ã§ããä»»æã®ç°å¢ã«ããããšãã§ããŸããã·ã¹ãã ã®ãã®éšåã¯ãéé¢ãšã¯ãã¹ãã©ãããã©ãŒã ã®ç§»æ€æ§ãç¶æããããã®éµãšãªããŸãã
ã©ã³ã¿ã€ã ã®è²¬ä»»ïŒWasmã©ã³ã¿ã€ã ã¯ããªãã¢ã¡ã¢ãªã®äœæã管çãããã³ãããã³ã°ãæ åœããŸããã©ã³ã¿ã€ã ã¯éåžžãã¡ã¢ãªã®ãããã¯ãå²ãåœãŠãŸãããã®ã¡ã¢ãªãããã¯ã¯ãåæã®ãªãã¢ã¡ã¢ãªã衚ããŸããæ¬¡ã«ããã®ã¡ã¢ãªãWasmã¢ãžã¥ãŒã«ã§äœ¿çšã§ããããã«ããŸããã©ã³ã¿ã€ã ã¯ãWasmã¢ãžã¥ãŒã«ã§äœ¿çšãããä»®æ³ã¢ãã¬ã¹ãã察å¿ããç©çã¡ã¢ãªã®å Žæãžã®ãããã³ã°ãåŠçããŸããã©ã³ã¿ã€ã ã¯ãå¿ èŠã«å¿ããŠã¡ã¢ãªã®æ¡åŒµãåŠçããŸãã
ã¡ã¢ãªã®æ¡åŒµïŒWasmã¢ãžã¥ãŒã«ã¯ãã¹ãã¬ãŒãžãããã«å¿ èŠãšããå Žåãªã©ã«ããªãã¢ã¡ã¢ãªã®æ¡åŒµãèŠæ±ã§ããŸããã©ã³ã¿ã€ã ã¯ããã®ãããªèŠæ±ãè¡ããããšãã«ã远å ã®ã¡ã¢ãªãå²ãåœãŠã圹å²ãæ ããŸããã©ã³ã¿ã€ã ã®ã¡ã¢ãªç®¡çæ©èœã«ãã£ãŠãã¡ã¢ãªãã©ãã ãå¹ççã«æ¡åŒµã§ããããããã³ãªãã¢ã¡ã¢ãªã®æå€§ãµã€ãºã決ãŸããŸãã`memory.grow`åœä»€ã䜿çšãããšãã¢ãžã¥ãŒã«ã¯ã¡ã¢ãªãæ¡åŒµã§ããŸãã
ã¢ãã¬ã¹å€æïŒã©ã³ã¿ã€ã ã¯ãWasmã¢ãžã¥ãŒã«ã§äœ¿çšãããä»®æ³ã¢ãã¬ã¹ãç©çã¢ãã¬ã¹ã«å€æããŸãããã®ããã»ã¹ã«ã¯ãç¯å²ãã§ãã¯ãã¢ã¯ã»ã¹èš±å¯ã®æ€èšŒãªã©ãããã€ãã®æé ãå«ãŸããå ŽåããããŸããã¢ãã¬ã¹å€æããã»ã¹ã¯ã»ãã¥ãªãã£ã«äžå¯æ¬ ã§ããå²ãåœãŠãããä»®æ³ç©ºéã®å€ã®ã¡ã¢ãªé åãžã®äžæ£ã¢ã¯ã»ã¹ãé²ããŸãã
ã¡ã¢ãªãããã³ã°ãšã»ãã¥ãªãã£
WebAssemblyã®ã¡ã¢ãªãããã³ã°ã·ã¹ãã ã¯ã»ãã¥ãªãã£ã«ãšã£ãŠéåžžã«éèŠã§ããå¶åŸ¡ããéé¢ãããç°å¢ãæäŸããããšã«ãããWasmã¯ä¿¡é ŒãããŠããªãã³ãŒãããã¹ãã·ã¹ãã ã䟵害ããããšãªãå®å šã«å®è¡ãããããã«ããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã«å€§ããªåœ±é¿ãäžããŸãã
ãµã³ãããã¯ã¹åïŒWasmã®äž»ãªã»ãã¥ãªãã£äžã®å©ç¹ã¯ããã®ãµã³ãããã¯ã¹æ©èœã§ããã¡ã¢ãªãããã³ã°ã«ãããWasmã¢ãžã¥ãŒã«ãåºç€ãšãªãã·ã¹ãã ããéé¢ã§ããŸããã¢ãžã¥ãŒã«ã®ã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ã¯ãå²ãåœãŠããããªãã¢ã¡ã¢ãªã¹ããŒã¹ã«å¶éãããèš±å¯ãããç¯å²å€ã®ä»»æã®ã¡ã¢ãªã®å Žæãžã®èªã¿æžããé²ããŸãã
å¶åŸ¡ãããã¢ã¯ã»ã¹ïŒã¡ã¢ãªãããã³ã°ã«ãããã©ã³ã¿ã€ã ã¯ãªãã¢ã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ã§ããŸããã©ã³ã¿ã€ã ã¯ã¢ã¯ã»ã¹å¶éãé©çšããç¹å®ã®çš®é¡ã®æäœïŒèªã¿åãå°çšã¡ã¢ãªãžã®æžã蟌ã¿ãªã©ïŒãé²ãããšãã§ããŸããããã«ãããã¢ãžã¥ãŒã«ã®æ»æå¯Ÿè±¡é åãæžãããããã¡ãŒãªãŒããŒãããŒãªã©ã®æœåšçãªã»ãã¥ãªãã£è匱æ§ã軜æžãããŸãã
ã¡ã¢ãªãªãŒã¯ãšç Žæã®é²æ¢ïŒã¡ã¢ãªå²ãåœãŠãšè§£æŸãå¶åŸ¡ããããšã«ãããã©ã³ã¿ã€ã ã¯ãåŸæ¥ã®ããã°ã©ãã³ã°ç°å¢ã§äžè¬çãªã¡ã¢ãªãªãŒã¯ãã¡ã¢ãªç Žæã®åé¡ãé²ãã®ã«åœ¹ç«ã¡ãŸããWasmã®ã¡ã¢ãªç®¡çã¯ããã®ãªãã¢ã¡ã¢ãªãšå¶åŸ¡ãããã¢ã¯ã»ã¹ã«ããããããã®åŽé¢ã§åœ¹ç«ã¡ãŸãã
äŸïŒJSONãã¡ã€ã«ãè§£æããããã«èšèšãããWasmã¢ãžã¥ãŒã«ãæ³åããŠãã ããããµã³ãããã¯ã¹åãããŠããªãå ŽåãJSONããŒãµãŒã®ãã°ãåå ã§ããã¹ããã·ã³äžã§ä»»æã®ã³ãŒããå®è¡ãããå¯èœæ§ããããŸãããã ããWasmã®ã¡ã¢ãªãããã³ã°ã®ãããã§ãã¢ãžã¥ãŒã«ã®ã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ã¯å¶éããããã®ãããªãšã¯ã¹ããã€ãã®ãªã¹ã¯ãå€§å¹ ã«è»œæžãããŸãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
ã»ãã¥ãªãã£ã¯äž»èŠãªæžå¿µäºé ã§ãããã¡ã¢ãªãããã³ã°ã·ã¹ãã ã¯WebAssemblyã®ããã©ãŒãã³ã¹ç¹æ§ã«ãããŠãéèŠãªåœ¹å²ãæãããŸããèšèšäžã®æ±ºå®ã¯ãWasmã¢ãžã¥ãŒã«ãã©ãã ãå¹ççã«ã§ãããã«åœ±é¿ããŸãã
å¹ççãªã¢ã¯ã»ã¹ïŒWasmã©ã³ã¿ã€ã ã¯ãã¢ãã¬ã¹å€æããã»ã¹ãæé©åããŠãã¡ã¢ãªãžã®å¹ççãªã¢ã¯ã»ã¹ãä¿èšŒããŸããæé©åã«ã¯ããã£ãã·ã¥ãã¬ã³ããªãŒãšãã¢ãã¬ã¹ã«ãã¯ã¢ããã®ãªãŒããŒãããã®æå°åãå«ãŸããŸãã
ã¡ã¢ãªã¬ã€ã¢ãŠãã®æé©åïŒWasmã®èšèšã«ãããéçºè ã¯ã³ãŒããæé©åããŠã¡ã¢ãªã¢ã¯ã»ã¹ãã¿ãŒã³ãæ¹åã§ããŸãããªãã¢ã¡ã¢ãªå ã®ããŒã¿ãæŠç¥çã«ç·šæããããšã«ãããéçºè ã¯ãã£ãã·ã¥ãããã®å¯èœæ§ãé«ããããã«ãã£ãŠWasmã¢ãžã¥ãŒã«ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®çµ±åïŒè©²åœããå ŽåïŒïŒWasmã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã矩åä»ããŠããŸãããããµããŒãã¯é²åããŠããŸããWasmã©ã³ã¿ã€ã ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãçµ±åããå Žåãã¡ã¢ãªãããã³ã°ã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒãšã¹ã ãŒãºã«é£æºããŠãã¡ã¢ãªãªããžã§ã¯ããèå¥ããã³ç®¡çããå¿ èŠããããŸãã
äŸïŒWasmããŒã¹ã®ç»ååŠçã©ã€ãã©ãªã¯ãæ éã«æé©åãããã¡ã¢ãªã¬ã€ã¢ãŠããå©çšããŠããã¯ã»ã«ããŒã¿ãžã®è¿ éãªã¢ã¯ã»ã¹ãä¿èšŒããå ŽåããããŸãããã®ãããªèšç®è² è·ã®é«ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãå¹ççãªã¡ã¢ãªã¢ã¯ã»ã¹ãããã©ãŒãã³ã¹ã«ãšã£ãŠéèŠã§ãã
ã¯ãã¹ãã©ãããã©ãŒã äºææ§
WebAssemblyã®ã¡ã¢ãªãããã³ã°ã·ã¹ãã ã¯ãã¯ãã¹ãã©ãããã©ãŒã äºææ§ãããããã«èšèšãããŠããŸããããã¯ãåãWasmã³ãŒããã倿Žããã«ããŸããŸãªããŒããŠã§ã¢ããã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§å®è¡ã§ããããã«ããéèŠãªæ©èœã§ãã
æœè±¡åïŒã¡ã¢ãªãããã³ã°ã·ã¹ãã ã¯ãåºç€ãšãªããã©ãããã©ãŒã åºæã®ã¡ã¢ãªç®¡çãæœè±¡åããŸããããã«ãããåãWasmã¢ãžã¥ãŒã«ãããã©ãããã©ãŒã åºæã®å€æŽãå¿ èŠãšããã«ãmacOSãWindowsãLinuxããŸãã¯çµã¿èŸŒã¿ã·ã¹ãã ã®ãã©ãŠã¶ãŒãªã©ã®ããŸããŸãªãã©ãããã©ãŒã ã§å®è¡ã§ããŸãã
æšæºåãããã¡ã¢ãªã¢ãã«ïŒWasm仿§ã¯æšæºåãããã¡ã¢ãªã¢ãã«ãå®çŸ©ãã仿§ã«æºæ ãããã¹ãŠã®ã©ã³ã¿ã€ã ã§ä»®æ³ã¢ãã¬ã¹ç©ºéãæŽåãããŸããããã«ãããç§»æ€æ§ãåäžããŸãã
ã©ã³ã¿ã€ã ã®é©å¿æ§ïŒWasmã©ã³ã¿ã€ã ã¯ãã¹ããã©ãããã©ãŒã ã«é©å¿ããŸããä»®æ³ã¢ãã¬ã¹ãã¿ãŒã²ããã·ã¹ãã ã®æ£ããç©çã¢ãã¬ã¹ã«ãããã³ã°ãã圹å²ãæ ããŸãããããã³ã°ã®å®è£ ã®è©³çްã¯ãã©ã³ã¿ã€ã ã«ãã£ãŠç°ãªãå ŽåããããŸãããå šäœçãªæ©èœã¯åããŸãŸã§ãã
äŸïŒC++ã§èšè¿°ãããWasmã«ã³ã³ãã€ã«ããããããªã²ãŒã ã¯ãåºç€ãšãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãããŒããŠã§ã¢ã«é¢ä¿ãªããäºææ§ã®ãããã©ãŠã¶ãŒãåããããããããã€ã¹ã®Webãã©ãŠã¶ãŒã§å®è¡ã§ããŸãããã®ç§»æ€æ§ã¯ãéçºè ã«ãšã£ãŠå€§ããªå©ç¹ã§ãã
ã¡ã¢ãªç®¡çã®ããã®ããŒã«ãšãã¯ãããžãŒ
ããã€ãã®ããŒã«ãšãã¯ãããžãŒã¯ãéçºè ãWebAssemblyã䜿çšããéã«ã¡ã¢ãªã管çããã®ã«åœ¹ç«ã¡ãŸãããããã®ãªãœãŒã¹ã¯ãå¹ççã§å ç¢ãªWasmã¢ããªã±ãŒã·ã§ã³ãäœæããéçºè ã«ãšã£ãŠäžå¯æ¬ ã§ãã
- EmscriptenïŒCããã³C++ã³ãŒããWasmã«ã³ã³ãã€ã«ããããã®äžè¬çãªããŒã«ãã§ãŒã³ãEmscriptenã¯ãã¡ã¢ãªãããŒãžã£ãŒããã³ãã®ä»ã®ãŠãŒãã£ãªãã£ãæäŸããŠãã¡ã¢ãªå²ãåœãŠãè§£æŸãããã³ãã®ä»ã®ã¡ã¢ãªç®¡çã¿ã¹ã¯ãåŠçããŸãã
- BinaryenïŒWebAssemblyçšã®ã³ã³ãã€ã©ããã³ããŒã«ãã§ãŒã³ã€ã³ãã©ã¹ãã©ã¯ãã£ã©ã€ãã©ãªãBinaryenã«ã¯ãã¡ã¢ãªäœ¿çšéã®åæãªã©ãWasmã¢ãžã¥ãŒã«ã®æé©åããã³æäœãè¡ãããã®ãŠãŒãã£ãªãã£ãå«ãŸããŠããŸãã
- WasmtimeãšWasmerïŒã¡ã¢ãªç®¡çæ©èœãšãããã°ããŒã«ãæäŸããã¹ã¿ã³ãã¢ãã³ã®Wasmã©ã³ã¿ã€ã ããããã¯ãã¡ã¢ãªäœ¿çšçã«å¯Ÿããåªããå¶åŸ¡ãšå¯èŠæ§ãæäŸããŸããããã¯ãããã°ã«åœ¹ç«ã¡ãŸãã
- ãããã¬ãŒïŒæšæºã®ãããã¬ãŒïŒææ°ã®ãã©ãŠã¶ãŒã«çµã¿èŸŒãŸããŠãããã®ãªã©ïŒã䜿çšãããšãéçºè ã¯Wasmã¢ãžã¥ãŒã«ã®ãªãã¢ã¡ã¢ãªã調ã¹ãå®è¡äžã«ã¡ã¢ãªäœ¿çšéããã§ãã¯ã§ããŸãã
å®è¡å¯èœãªã€ã³ãµã€ãïŒãããã®ããŒã«ã䜿çšããŠãWasmã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªäœ¿çšéãæ€æ»ããã³ãããã°ããæ¹æ³ãåŠã³ãŸãããããã®ããŒã«ãçè§£ãããšãæœåšçãªã¡ã¢ãªé¢é£ã®åé¡ãç¹å®ããŠè§£æ±ºããã®ã«åœ¹ç«ã¡ãŸãã
äžè¬çãªèª²é¡ãšãã¹ããã©ã¯ãã£ã¹
WebAssemblyã¯åŒ·åã§å®å šãªã¡ã¢ãªã¢ãã«ãæäŸããŸãããéçºè ã¯ã¡ã¢ãªã管çããéã«èª²é¡ã«ééããå¯èœæ§ããããŸããäžè¬çãªèœãšã穎ãçè§£ãããã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšã¯ãå¹ççã§ä¿¡é Œæ§ã®é«ãWasmã¢ããªã±ãŒã·ã§ã³ãéçºããããã«éèŠã§ãã
ã¡ã¢ãªãªãŒã¯ïŒã¡ã¢ãªãªãŒã¯ã¯ãã¡ã¢ãªãå²ãåœãŠããããè§£æŸãããªãå Žåã«çºçããå¯èœæ§ããããŸããã¡ã¢ãªãããã³ã°ã·ã¹ãã ã¯ãããã€ãã®æ¹æ³ã§ã¡ã¢ãªãªãŒã¯ãé²ãã®ã«åœ¹ç«ã¡ãŸãããéçºè ã¯åºæ¬çãªã¡ã¢ãªç®¡çã«ãŒã«ïŒé©åãªå Žåã¯`free`ã䜿çšãããªã©ïŒã«åŸãå¿ èŠããããŸããïŒã©ã³ã¿ã€ã ã§ãµããŒããããŠããå ŽåïŒã¬ããŒãžã³ã¬ã¯ã¿ãŒã䜿çšãããšããããã®ãªã¹ã¯ã軜æžã§ããŸãã
ãããã¡ãŒãªãŒããŒãããŒïŒãããã¡ãŒãªãŒããŒãããŒã¯ãå²ãåœãŠããããããã¡ãŒã®æ«å°Ÿãè¶ ããŠããŒã¿ãæžã蟌ãŸããå Žåã«çºçããå¯èœæ§ããããŸããããã«ãããã»ãã¥ãªãã£ã®è匱æ§ãäºæããªãããã°ã©ã ã®åäœãçºçããå¯èœæ§ããããŸããéçºè ã¯ãã¡ã¢ãªã«æžã蟌ãåã«å¿ ãå¢çãã§ãã¯ãå®è¡ããå¿ èŠããããŸãã
ã¡ã¢ãªã®ç ŽæïŒã¡ã¢ãªã®ç Žæã¯ãã¡ã¢ãªãééã£ãå Žæã«æžã蟌ãŸããå ŽåããŸãã¯äžè²«æ§ã®ãªãæ¹æ³ã§ã¢ã¯ã»ã¹ãããå Žåã«çºçããå¯èœæ§ããããŸããæ³šææ·±ãã³ãŒãã£ã³ã°ã培åºçãªãã¹ããããã³ãããã¬ãŒã®äœ¿çšã¯ããããã®åé¡ãåé¿ããã®ã«åœ¹ç«ã¡ãŸããéçºè ã¯ãã¡ã¢ãªç®¡çã®ãã¹ããã©ã¯ãã£ã¹ã«åŸããã¡ã¢ãªã®æŽåæ§ã確ä¿ããããã«åºç¯ãªãã¹ããå®è¡ããå¿ èŠããããŸãã
ããã©ãŒãã³ã¹ã®æé©åïŒéçºè ã¯ãé«ãããã©ãŒãã³ã¹ãå®çŸããããã«ã¡ã¢ãªã¢ã¯ã»ã¹ãã¿ãŒã³ãæé©åããæ¹æ³ãçè§£ããå¿ èŠããããŸããããŒã¿æ§é ãã¡ã¢ãªã¢ã©ã€ã¡ã³ããããã³å¹ççãªã¢ã«ãŽãªãºã ãé©åã«äœ¿çšãããšãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããå¯èœæ§ããããŸãã
ãã¹ããã©ã¯ãã£ã¹ïŒ
- å¢çãã§ãã¯ã䜿çšããïŒåžžã«é åã®å¢çããã§ãã¯ããŠããããã¡ãŒãªãŒããŒãããŒãé²ããŸãã
- ã¡ã¢ãªãæ³šææ·±ã管çããïŒã¡ã¢ãªãªãŒã¯ãåé¿ããããã«ãã¡ã¢ãªãæ£ããå²ãåœãŠããã³è§£æŸãããŠããããšã確èªããŸãã
- ããŒã¿æ§é ãæé©åããïŒã¡ã¢ãªã¢ã¯ã»ã¹ã®ãªãŒããŒããããæå°éã«æããå¹ççãªããŒã¿æ§é ãéžæããŸãã
- ãããã¡ã€ãªã³ã°ãšãããã°ïŒãããã¡ã€ãªã³ã°ããŒã«ãšãããã¬ãŒã䜿çšããŠãã¡ã¢ãªé¢é£ã®åé¡ãç¹å®ããŠå¯ŸåŠããŸãã
- ã©ã€ãã©ãªã掻çšããïŒ`malloc`ã`free`ãªã©ã®ã¡ã¢ãªç®¡çæ©èœãæäŸããã©ã€ãã©ãªãå©çšããŸãã
- 培åºçã«ãã¹ãããïŒã¡ã¢ãªã®ãšã©ãŒãæ€åºããããã«åºç¯ãªãã¹ããå®è¡ããŸãã
å°æ¥ã®ãã¬ã³ããšéçº
WebAssemblyã®äžçã¯åžžã«é²åããŠãããã¡ã¢ãªç®¡çãã»ãã¥ãªãã£ãããã³ããã©ãŒãã³ã¹ãåäžãããããã®äœæ¥ãé²è¡äžã§ãããããã®ãã¬ã³ããçè§£ããããšã¯ãæä»£ã®å ãè¡ãããã«éèŠã§ãã
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãµããŒãã¯ãWasmå ã§æŽ»çºã«éçºãããŠããåéã§ããããã«ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã䜿çšããèšèªã䜿çšããéçºè ã®ã¡ã¢ãªç®¡çãå€§å¹ ã«ç°¡çŽ åãããã¢ããªã±ãŒã·ã§ã³éçºå šäœãåäžããå¯èœæ§ããããŸããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããã·ãŒã ã¬ã¹ã«çµ±åããããã®äœæ¥ãé²è¡äžã§ãã
æ¹åããããããã°ããŒã«ïŒãããã°ããŒã«ã¯ããæŽç·ŽãããŠãããéçºè ã¯Wasmã¢ãžã¥ãŒã«ãè©³çŽ°ã«æ€æ»ããã¡ã¢ãªé¢é£ã®åé¡ããã广çã«ç¹å®ã§ããŸãããããã°ããŒã«ã¯åŒãç¶ãæ¹åãããŠããŸãã
é«åºŠãªã¡ã¢ãªç®¡çææ³ïŒç ç©¶è ã¯ãWasmçšã«ç¹å¥ã«èšèšãããé«åºŠãªã¡ã¢ãªç®¡çææ³ãç ç©¶ããŠããŸãããããã®ææ³ã«ãããã¡ã¢ãªå²ãåœãŠã®å¹çãåäžããã¡ã¢ãªãªãŒããŒããããåæžãããããã©ãŒãã³ã¹ãããã«åäžããå¯èœæ§ããããŸãã
ã»ãã¥ãªãã£ã®åŒ·åïŒWasmã®ã»ãã¥ãªãã£æ©èœãåäžãããããã®åãçµã¿ãé²è¡äžã§ããããã«ã¯ãã¡ã¢ãªä¿è·ããµã³ãããã¯ã¹åãããã³æªæã®ããã³ãŒãã®å®è¡ã鲿¢ããããã®æ°ããææ³ã®éçºãå«ãŸããŸããã»ãã¥ãªãã£ã®æ¹åã¯ç¶ç¶ããŠããŸãã
å®è¡å¯èœãªã€ã³ãµã€ãïŒæ¥çã®ããã°ããã©ããŒããã«ã³ãã¡ã¬ã³ã¹ã«åå ãããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã«åå ããŠãWasmã¡ã¢ãªç®¡çã®ææ°ã®éçºã«ã€ããŠåžžã«æ å ±ãå ¥æããŠãã ãããç¶æ³ã¯åžžã«é²åããŠããŸãã
çµè«
WebAssemblyã®ãªãã¢ã¡ã¢ãªãšä»®æ³ã¢ãã¬ã¹ç©ºéã¯ãã¡ã¢ãªãããã³ã°ã·ã¹ãã ãšçµã¿åããããŠããã®ã»ãã¥ãªãã£ãããã©ãŒãã³ã¹ãããã³ã¯ãã¹ãã©ãããã©ãŒã æ©èœã®åºç€ã圢æããŸããã¡ã¢ãªç®¡çãã¬ãŒã ã¯ãŒã¯ã®æç¢ºã«å®çŸ©ãããæ§è³ªã¯ãéçºè ãç§»æ€å¯èœã§å®å šãªã³ãŒããäœæããã®ã«åœ¹ç«ã¡ãŸããWasmãã¡ã¢ãªãã©ã®ããã«åŠçããããçè§£ããããšã¯ãWasmã䜿çšããéçºè ã«ãšã£ãŠãæ ç¹ãã©ãã§ãã£ãŠãäžå¯æ¬ ã§ãããã®ååãçè§£ãããã¹ããã©ã¯ãã£ã¹ãå®è£ ããæ°ããªãã¬ã³ãã«ç®ãå ãããããšã§ãéçºè ã¯Wasmã®å¯èœæ§ãæå€§éã«æŽ»çšããŠãã°ããŒãã«ãªèŽè¡åãã«é«æ§èœã§å®å šãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã